package com.example.demo.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.bean.SCustomer;
import com.example.demo.bean.SProduct;
import com.example.demo.common.exception.DataValidException;
import com.example.demo.mapper.SInventoryMapper;
import com.example.demo.mapper.SItemMapper;
import com.example.demo.mapper.SProductMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

@Service
public class SProductService {
	@Autowired
	private SProductMapper spMapper;
	@Autowired
	private SInventoryMapper siMapper;
	@Autowired
	private SItemMapper sItemMapper;
	//搜索所有的产品信息
	public PageInfo<SProduct> findAllByPage(int pageNum, int pageSize){
		PageHelper.startPage(pageNum,pageSize);
		//执行查找行为
		List<SProduct> list=spMapper.selectAll();
		if (list==null) {
			list= new ArrayList<SProduct>(0);
		}
		return new PageInfo<SProduct>(list);//按照查找结果返回产品信息
	}
	
	//按照商品名称查找信息
	public PageInfo<SProduct> findByName(String name, int pageNum, int pageSize) {
		PageHelper.startPage(pageNum,pageSize);
		List<SProduct> list= spMapper.selectByName(name);
		if (list==null) {
			list=new ArrayList<>(0);
			System.out.println("====================================================");
		}
		
		return new PageInfo<>(list);
	}
	
	//保存或更新商品信息
	public void saveOrupdate(SProduct sp) {
		//判断输入的信息是否存在
		if (sp.getId()==null) {
			spMapper.insert(sp);
		}else {
			spMapper.updateByPrimaryKey(sp);
		}
	}
	
	//按照id删除产品信息
	//product作为inventory.item的外键存在
	//删除前要查询inventory.item是否存在
	public int deleteById(Integer id) {
		//判断id是否为空
		if (id==null) {
			throw new DataValidException("请输入正确的id");
		}
		//按照产品id查找信息，如果找不到就提示删除失败
		SProduct sp=spMapper.selectByPrimaryKey(id);
		if (sp==null) {
			throw new DataValidException("删除失败");
		}
		//查询下属是否存在inventory
		if (!siMapper.selectByProductId(sp.getId()).isEmpty()||
			!sItemMapper.selectByProductId(sp.getId()).isEmpty()
				) {
			throw new DataValidException("存在下属的库存信息，请删除对应的库存信息和物品信息后，在进行删除");
		}
		spMapper.deleteByPrimaryKey(id);
		return 0;
	}
	
	//批量删除产品信息
	public int batchDeleteById(int[] id) {
		//判断是否为空
		if (id.length==0||id==null) {
			throw new DataValidException("请选择一批id删除");
		}
		//查找要删除的顾客信息
		for (int i : id) {
			SProduct sp =spMapper.selectByPrimaryKey(i);
			if (sp==null) {
				throw new DataValidException("删除失败");
			}
			//查询下属是否存在inventory
			if (!siMapper.selectByProductId(sp.getId()).isEmpty()||
					!sItemMapper.selectByProductId(sp.getId()).isEmpty()) {
				throw new DataValidException("存在下属的库存信息，请删除对应的库存信息后，在进行删除");
			}
		}
		//删除顾客信息
		spMapper.batchDelete(id);
		return 0;
	}
	
}
